package br.com.lacibMusic.rn;

import br.com.lacibMusic.entidades.Musica;
import br.com.lacibMusic.dao.GenericDAO;
import br.com.lacibMusic.dao.MusicaDAO;
import br.com.lacibMusic.entidades.Artista;
import br.com.lacibMusic.entidades.Compositor;
import br.com.lacibMusic.entidades.Disco;
import br.com.lacibMusic.entidades.GeneroMusical;
import java.util.List;
import javax.faces.model.SelectItem;

public class MusicaRN {

    private final GenericDAO dao = new GenericDAO();
    private final MusicaDAO musicaDao = new MusicaDAO();

    public Musica novo() {
        return new Musica();
    }

    public boolean salvar(Musica c) {
        if (c.getId() == null) {
            return dao.criar(c);
        } else {
            return dao.alterar(c);
        }
    }

    public boolean remover(Musica c) {
        //return dao.excluir(c);
        return dao.excluir(c, c.getId());
    }

    public Musica obter(Integer id) {
        return (Musica) dao.obter(Musica.class, id);
    }

    public List<Musica> obterTodos() {
        return dao.obterTodos(Musica.class);
    }

    public List<Musica> obterTodosPorDisco(Disco disco) {
        return musicaDao.obterDisco(Musica.class, disco);
    }

    public List<Musica> obterPorNome(String nome) {
        return musicaDao.obterPorNome(Musica.class, nome);
    }
    
    public List<Musica> obterPorGeneroMusical(int id) {
        return musicaDao.obterPorGeneroMusical(Musica.class, id);
    }

    public SelectItem[] getCompositores() {
        List<Compositor> compositores = dao.obterTodos(Compositor.class);
        SelectItem[] retorno = new SelectItem[compositores.size()];
        for (int i = 0; i < retorno.length; i++) {
            retorno[i] = new SelectItem(compositores.get(i), compositores.get(i).getNomeCompositor());
        }
        return retorno;
    }

    public SelectItem[] getArtistas() {
        List<Artista> artistas = dao.obterTodos(Artista.class);
        SelectItem[] retorno = new SelectItem[artistas.size()];
        for (int i = 0; i < retorno.length; i++) {
            retorno[i] = new SelectItem(artistas.get(i), artistas.get(i).getNomeArtista());
        }
        return retorno;
    }

    public SelectItem[] getGeneroMusical() {
        List<GeneroMusical> generoMusicais = dao.obterTodos(GeneroMusical.class);
        SelectItem[] retorno = new SelectItem[generoMusicais.size()];
        for (int i = 0; i < retorno.length; i++) {
            retorno[i] = new SelectItem(generoMusicais.get(i), generoMusicais.get(i).getNomeGeneroMusical());
        }
        return retorno;
    }
}
